home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-20
/
7kmemupd.zip
/
7000MEM.BAS
next >
Wrap
BASIC Source File
|
1991-08-28
|
29KB
|
1,419 lines
REM 7000MEM.BAS
REM
REM Compile with MS Basic Compiler
REM
REM By: Anthony A. Robinson
REM UUNET: ..!uunet!microsoft!anthonyr
REM CIS: 71540,655
REM
REM Copyright Anthony A. Robinson, 1991
REM All rights reserved. Personal use only.Ç
' $INCLUDE: 'qbx.bi'
DECLARE SUB BufToFile (AutoFileName$)
DECLARE SUB BufToRadioMem (MemStart%, MemEnd%)
DECLARE SUB CheckResponse ()
DECLARE SUB CleanUp ()
DECLARE SUB CloseCom ()
DECLARE SUB DisplayBuf ()
DECLARE SUB DisplayHeader ()
DECLARE SUB DisplayLine (Row%, Col%, Align$, Line$)
DECLARE SUB DisplayMenu ()
DECLARE SUB EditBuffer ()
DECLARE SUB Experiment ()
DECLARE SUB FileToBuf (FileName$)
DECLARE SUB Flush ()
DECLARE SUB GetFreqAndMode (Freq!, Mode%)
DECLARE SUB GetPortStatus ()
DECLARE SUB Init ()
DECLARE SUB InitBuf (MemStart%, MemEnd%)
DECLARE SUB Main ()
DECLARE SUB OpenCom ()
DECLARE SUB RadioMemToBuf (MemStart%, MemEnd%)
DECLARE SUB ReadConfig ()
DECLARE SUB ReceiveFreq (Freq!)
DECLARE SUB ReceiveMode (Mode%)
DECLARE SUB SendCmd (CMD%, Data$)
DECLARE SUB SendFreqAndMode (Freq!, Mode%)
DECLARE SUB SetBaud ()
DECLARE SUB SetEditor ()
DECLARE SUB SortBuf ()
DECLARE SUB UniqBuf ()
DECLARE SUB WriteConfig ()
CONST FALSE = 0, TRUE = -1
COMMON SHARED ch$(), Freqs(), Modes%()
COMMON SHARED LastFile$, Baud%, Baud$, Editor$
COMMON SHARED DestAddr, SourceAddr, CMD1$
COMMON SHARED CMDSetFreqTX
COMMON SHARED CMDSetModeTX
COMMON SHARED CMDReadRange
COMMON SHARED CMDReadFreq
COMMON SHARED CMDReadMode
COMMON SHARED CMDSetFreq
COMMON SHARED CMDSetMode
COMMON SHARED CMDSetVFO
COMMON SHARED CMDSetMem
COMMON SHARED CMDVFOtoMem
COMMON SHARED CMDMemToVFO
COMMON SHARED CMDClearMem
COMMON SHARED CMDReadOffset
COMMON SHARED CMDSetOffset
COMMON SHARED CMDScan
COMMON SHARED MsgOut$, MsgIn$
DIM SHARED InRegs AS RegType, OutRegs AS RegType
Start:
DIM ch$(110)
DIM Freqs(99)
DIM Modes%(99)
DIM SHARED Notes(1 TO 99) AS STRING * 160
Init
Main
CloseCom
END
SUB BufToFile (AutoFileName$)
IF AutoFileName$ <> "" THEN
File$ = AutoFileName$
ELSE
DisplayHeader
LOCATE 8
PRINT
ON LOCAL ERROR GOTO BTFErr
FILES "*.frq"
ON LOCAL ERROR GOTO 0
IF FileErr$ <> "Y" THEN
Line$ = "---------- Files previously saved ----------"
DisplayLine 7, 1, "C", Line$
ELSE
DisplayHeader
END IF
Line$ = "Save frequencies to what file"
DisplayLine 5, 1, "C", Line$
INPUT File$
IF File$ = "" THEN EXIT SUB
i% = INSTR(File$, ".")
IF i% > 1 THEN
File$ = MID$(File$, 1, i% - 1)
END IF
File$ = File$ + ".frq"
END IF
OPEN File$ FOR OUTPUT AS #2
LastFile$ = File$
FOR i% = 99 TO 1 STEP -1
IF Freqs(i%) > 0 THEN
Max% = i%
EXIT FOR
END IF
NEXT i%
FOR i% = 1 TO Max%
IF Freqs(i%) > 0 THEN
SELECT CASE Modes%(i%)
CASE 0
Mode$ = "0"
CASE 1
Mode$ = "AM"
CASE 2
Mode$ = "FM"
CASE 3
Mode$ = "FMN"
CASE 4
Mode$ = "SSB"
CASE ELSE
Mode$ = "???"
END SELECT
FOR j% = 160 TO 1 STEP -1
IF MID$(Notes(i%), j%, 1) <> " " THEN EXIT FOR
NEXT j%
IF j% > 0 THEN
PRINT #2, USING "###.####" + CHR$(&H9) + "&" + CHR$(&H9) + "&"; Freqs(i%); Mode$; MID$(Notes(i%), 1, j%)
ELSE
PRINT #2, USING "###.####" + CHR$(&H9) + "&"; Freqs(i%); Mode$
END IF
ELSE
PRINT #2, ""
END IF
NEXT i%
CLOSE #2
EXIT SUB
BTFErr:
FileErr$ = "Y"
RESUME NEXT
END SUB
SUB BufToRadioMem (MemStart%, MemEnd%)
DisplayHeader
Line$ = "This will overwrite all existing memory locations in the radio."
DisplayLine 5, 0, "C", Line$
Line$ = "Are you sure this is what you want to do?"
DisplayLine 7, 0, "C", Line$
ans$ = INPUT$(1)
IF NOT (ans$ = "y" OR ans$ = "Y") THEN EXIT SUB
DisplayHeader
Line$ = "Transferring: Buffer --> Radio"
DisplayLine 5, 0, "C", Line$
Line$ = "(Press <SPACE> to abort)"
DisplayLine 9, 0, "C", Line$
COMErr = FALSE
ON LOCAL ERROR GOTO COMError1
IF LOC(1) > 0 THEN x$ = INPUT$(LOC(1), #1)
FOR memory% = MemStart% TO MemEnd%
IF INKEY$ = " " THEN EXIT FOR
Freq = Freqs(memory%)
Mode% = Modes%(memory%)
LOCATE 7, 29: PRINT USING "Memory:## ###.####Mhz"; memory%; Freq
CMD% = CMDSetMem
Data$ = ch$(memory%)
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
IF Freq >= 25 AND Freq <= 1000 THEN
Freq$ = STR$(Freq)
Freq$ = MID$(Freq$, 2, LEN(Freq$) - 1)
IF Freq < 100 THEN Freq$ = "0" + Freq$
FOR i% = 1 TO 5
Freq$ = Freq$ + "0"
NEXT i%
Data$ = CHR$(0)
Data$ = Data$ + CHR$(16 * VAL(MID$(Freq$, 7, 1)) + VAL(MID$(Freq$, 8, 1)))
Data$ = Data$ + CHR$(16 * VAL(MID$(Freq$, 5, 1)) + VAL(MID$(Freq$, 6, 1)))
Data$ = Data$ + CHR$(16 * VAL(MID$(Freq$, 2, 1)) + VAL(MID$(Freq$, 3, 1)))
Data$ = Data$ + CHR$(VAL(MID$(Freq$, 1, 1)))
CMD% = CMDSetFreq
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
CMD% = CMDSetMode
IF Modes%(memory%) = 1 THEN Data$ = CHR$(&H2)
IF Modes%(memory%) = 2 THEN Data$ = CHR$(&H5)
IF Modes%(memory%) = 3 THEN Data$ = CHR$(&H5) + CHR$(&H2)
IF Modes%(memory%) = 4 THEN Data$ = CHR$(&H5) + CHR$(&H0)
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
CMD% = CMDVFOtoMem
Data$ = ""
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
ELSE
CMD% = CMDClearMem
Data$ = ""
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
END IF
NEXT memory%
EXIT SUB
COMError1:
GetPortStatus
COMErr = TRUE
Line$ = "COM port error detected -- attempting to fix, please wait."
DisplayLine 12, 0, "C", Line$
CloseCom
OpenCom
Line$ = " "
DisplayLine 12, 0, "C", Line$
RESUME NEXT
END SUB
SUB CheckResponse
CRTop:
a$ = INPUT$(1, #1) ' Get next character
v% = ASC(a$) ' Convert to number
h$ = HEX$(v%) ' Convert to hex string
PRINT h$; ' Print it out
PRINT " ";
IF v% = &HFD THEN PRINT : EXIT SUB ' Look for end byte
GOTO CRTop ' Loop back for next char
END SUB
SUB CloseCom
CLOSE #1
END SUB
SUB DisplayBuf
DisplayHeader
FOR i% = 1 TO 99
Row% = i%
IF i% < 21 THEN
Col% = 1
END IF
IF i% > 20 AND i% < 41 THEN
Col% = 16
Row% = i% - 20
END IF
IF i% > 40 AND i% < 61 THEN
Col% = 31
Row% = i% - 40
END IF
IF i% > 60 AND i% < 81 THEN
Col% = 46
Row% = i% - 60
END IF
IF i% > 80 THEN
Col% = 61
Row% = i% - 80
END IF
LOCATE Row% + 3, Col%
IF Freqs(i%) > 0 THEN
PRINT USING "##. ###.####~#"; i%; Freqs(i%); Modes%(i%)
ELSE
PRINT USING "##."; i%
END IF
NEXT i%
Line$ = "Press any key to continue..."
DisplayLine 25, 0, "C", Line$
x$ = INPUT$(1)
END SUB
SUB DisplayHeader
CLS
Line$ = "*** ICOM IC-R7000 Memory Backup and Restore Utility ***"
DisplayLine 1, 0, "C", Line$
IF LastFile$ <> "" THEN
Line$ = "Current frequency file: " + LastFile$
DisplayLine 3, 0, "C", Line$
END IF
END SUB
SUB DisplayLine (Row%, Col%, Align$, Line$)
Align$ = UCASE$(Align$)
SELECT CASE Align$
CASE "C"
Col% = INT(((80 - LEN(Line$)) / 2) + .5)
CASE "L"
Col% = 1
CASE "R"
Col% = INT(80 - LEN(Line$))
CASE ELSE
IF Col% = 0 THEN Col% = 1
END SELECT
IF Row% > 0 THEN
LOCATE Row%, Col%: PRINT Line$;
ELSE
LOCATE , Col%: PRINT Line$;
END IF
END SUB
SUB DisplayMenu
DisplayHeader
Line$ = "* Radio Memory Functions *"
DisplayLine 5, 0, "C", Line$
Line$ = "1. Retrieve Radio Memories into Buffer "
DisplayLine 7, 0, "C", Line$
Line$ = "2. Write Buffer to Radio Memories "
DisplayLine 8, 0, "C", Line$
Line$ = "3. Retrieve Scan Memories 80-99 into Buffer "
DisplayLine 9, 0, "C", Line$
Line$ = "* Disk File Functions *"
DisplayLine 11, 0, "C", Line$
Line$ = "4. Retrieve Freq File into Buffer "
DisplayLine 13, 0, "C", Line$
Line$ = "5. Write Buffer to Freq File "
DisplayLine 14, 0, "C", Line$
Line$ = "* Other Functions *"
DisplayLine 16, 0, "C", Line$
Line$ = "6. Display Buffer Contents 8. Set Baud Rate "
DisplayLine 18, 0, "C", Line$
Line$ = "7. Edit Buffer Contents 9. Set Your Editor"
DisplayLine 19, 0, "C", Line$
Line$ = "Q. Quit"
DisplayLine 21, 0, "C", Line$
END SUB
SUB EditBuffer
IF LastFile$ = "" THEN
LastFile$ = "buffer.frq"
END IF
BufToFile LastFile$
SHELL Editor$ + " " + LastFile$
FileToBuf LastFile$
END SUB
SUB Experiment
IF LOC(1) > 0 THEN x$ = INPUT$(LOC(1), #1)
CMD% = CMDScan
Data$ = CHR$(&H42)
SendCmd CMD%, Data$
Data$ = ""
CheckResponse
CheckResponse
x$ = INPUT$(1)
END SUB
SUB FileToBuf (File$)
DIM Files$(100)
IF File$ = "" THEN
FileErr$ = ""
DisplayHeader
ON LOCAL ERROR GOTO FTBErr
SHELL "dir *.frq > dir.tmp"
ON LOCAL ERROR GOTO 0
IF FileErr$ <> "Y" THEN
Line$ = "---------- Files previously saved ----------"
DisplayLine 5, 1, "C", Line$
ELSE
DisplayHeader
Line$ = "*** There are no frequency files available ***"
DisplayLine 5, 1, "C", Line$
Line$ = "Press any key to contine..."
DisplayLine 7, 1, "C", Line$
x$ = INPUT$(1)
EXIT SUB
END IF
OPEN "dir.tmp" FOR INPUT AS #2
i% = 0
DO WHILE NOT EOF(2)
LINE INPUT #2, Line$
File$ = LEFT$(Line$, INSTR(Line$, " "))
IF File$ > " " THEN
i% = i% + 1
Files$(i%) = LCASE$(File$)
Max% = i%
END IF
LOOP
CLOSE #2
KILL "dir.tmp"
Rows% = INT((Max% - 1) / 5) + 1
FOR Col% = 1 TO 5
FOR Row% = 1 TO Rows%
LOCATE Row% + 6, INT((Col% - 1) * 16 + 1)
i% = (Col% - 1) * Rows% + Row%
IF i% <= Max% THEN PRINT USING "##. \ \"; i%; Files$(i%);
NEXT Row%
NEXT Col%
Line$ = "Enter Choice"
DisplayLine Rows% + 8, 1, "C", Line$
INPUT Number%
IF Number% = 0 THEN EXIT SUB
IF Number% < 0 OR Number% > Max% THEN EXIT SUB
File$ = Files$(Number%)
END IF
IF RIGHT$(File$, 1) = " " THEN File$ = LEFT$(File$, LEN(File$) - 1)
IF INSTR(File$, ".") = 0 THEN File$ = LCASE$(File$ + ".frq")
FileErr$ = ""
ON LOCAL ERROR GOTO FTBErr
OPEN File$ FOR INPUT AS #2
ON LOCAL ERROR GOTO 0
IF FileErr$ = "Y" THEN
PRINT "Error opening "; File$
x$ = INPUT$(1)
EXIT SUB
END IF
LastFile$ = File$
InitBuf 1, 99
i% = 0
DO WHILE NOT EOF(2)
i% = i% + 1
IF i% < 100 THEN
LINE INPUT #2, Line$
IF LEN(Line$) > 0 THEN
' --- Kill any leading spaces or tabs
FOR j% = 1 TO LEN(Line$)
AsciiChar = ASC(MID$(Line$, j%, 1))
IF AsciiChar <> 32 AND AsciiChar <> 9 THEN
cut% = j%
EXIT FOR
END IF
NEXT j%
IF j% > LEN(Line$) THEN
cut% = j%
END IF
Line$ = MID$(Line$, cut%)
' --- Get the first item on the line (hopefully the freq)
FOR j% = 1 TO LEN(Line$)
AsciiChar = ASC(MID$(Line$, j%, 1))
IF AsciiChar = 32 OR AsciiChar = 9 THEN
cut% = j% - 1
EXIT FOR
END IF
NEXT j%
IF j% > LEN(Line$) THEN
cut% = j%
END IF
Freqs(i%) = VAL(MID$(Line$, 1, cut%))
Line$ = MID$(Line$, cut% + 1)
' --- Skip over any intervening spaces or tabs
FOR j% = 1 TO LEN(Line$)
AsciiChar = ASC(MID$(Line$, j%, 1))
IF AsciiChar <> 32 AND AsciiChar <> 9 THEN
cut% = j%
EXIT FOR
END IF
NEXT j%
IF j% > LEN(Line$) THEN
cut% = j%
END IF
Line$ = MID$(Line$, cut%)
' --- Get the second item on the line (hopefully the mode)
FOR j% = 1 TO LEN(Line$)
AsciiChar = ASC(MID$(Line$, j%, 1))
IF AsciiChar = 32 OR AsciiChar = 9 THEN
cut% = j% - 1
EXIT FOR
END IF
NEXT j%
IF j% > LEN(Line$) THEN
cut% = j%
END IF
Mode$ = UCASE$(MID$(Line$, 1, cut%))
SELECT CASE Mode$
CASE "AM"
Modes%(i%) = 1
cut% = cut% + 1
CASE "FM"
Modes%(i%) = 2
cut% = cut% + 1
CASE "FMN"
Modes%(i%) = 3
cut% = cut% + 1
CASE "SSB"
Modes%(i%) = 4
cut% = cut% + 1
CASE "USB"
Modes%(i%) = 4
cut% = cut% + 1
CASE "LSB"
Modes%(i%) = 4
cut% = cut% + 1
CASE ELSE
Modes%(i%) = VAL(Mode$)
IF Freqs(i%) > 0 AND Modes%(i%) = 0 THEN
Modes%(i%) = 3
cut% = 1
ELSE
cut% = cut% + 1
END IF
END SELECT
Line$ = MID$(Line$, cut%)
' --- Skip over any intervening spaces or tabs
FOR j% = 1 TO LEN(Line$)
AsciiChar = ASC(MID$(Line$, j%, 1))
IF AsciiChar <> 32 AND AsciiChar <> 9 THEN
cut% = j%
EXIT FOR
END IF
NEXT j%
IF j% > LEN(Line$) THEN
cut% = j%
END IF
Notes(i%) = MID$(Line$, cut%)
END IF
ELSE
EXIT DO
END IF
LOOP
CLOSE #2
EXIT SUB
FTBErr:
FileErr$ = "Y"
RESUME NEXT
END SUB
SUB Flush
' IF LOC(1) > 0 THEN
' x$ = INPUT$(LOC(1), #1)
' END IF
' FOR i% = 1 TO 1700
' NEXT i%
' EXIT SUB
err$ = ""
MsgIn$ = ""
FlushTop:
a$ = INPUT$(1, #1)
v% = ASC(a$)
h$ = HEX$(v%)
IF err$ = "" THEN
IF v% = &HFA THEN err$ = "Y"
IF v% = &HFB THEN err$ = "N"
END IF
MsgIn$ = MsgIn$ + " " + h$
IF v% = &HFD THEN
GOTO FlushExit
ELSE
GOTO FlushTop
END IF
FlushExit:
IF err$ = "Y" THEN
PRINT
PRINT "*** ERROR ***"
PRINT "Last message out ", MsgOut$
PRINT "Last message back", MsgIn$
x$ = INPUT$(1)
END IF
END SUB
SUB GetFreqAndMode (Freq, Mode%)
CMD% = CMDReadFreq
Data$ = ""
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
ReceiveFreq Freq
CMD% = CMDReadMode
Data$ = ""
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
ReceiveMode Mode%
END SUB
SUB GetPortStatus
MessageCount% = 0
InRegs.AX = &H300
CALL Interrupt(&H14, InRegs, OutRegs)
' PRINT HEX$(OutRegs.AX)
IF OutRegs.AX AND 2 ^ 8 THEN
PRINT "Data Ready"
END IF
IF OutRegs.AX AND 2 ^ 9 THEN
PRINT "Overrun Error"
END IF
IF OutRegs.AX AND 2 ^ 10 THEN
PRINT "Parity Error"
END IF
IF OutRegs.AX AND 2 ^ 11 THEN
PRINT "Framing Error"
END IF
IF OutRegs.AX AND 2 ^ 12 THEN
PRINT "Break-detect Error"
END IF
IF OutRegs.AX AND 2 ^ 13 THEN
PRINT "Transfer holding register empty"
END IF
IF OutRegs.AX AND 2 ^ 14 THEN
PRINT "Transfer shift register empty"
END IF
IF OutRegs.AX AND 2 ^ 15 THEN
PRINT "Timeout Error"
END IF
IF OutRegs.AX AND 2 ^ 0 THEN
PRINT "CTS change"
END IF
IF OutRegs.AX AND 2 ^ 1 THEN
PRINT "DSR change"
END IF
IF OutRegs.AX AND 2 ^ 2 THEN
PRINT "Trailing-edge ring detector"
END IF
IF OutRegs.AX AND 2 ^ 3 THEN
PRINT "RD change"
END IF
IF OutRegs.AX AND 2 ^ 4 THEN
PRINT "CTS"
END IF
IF OutRegs.AX AND 2 ^ 5 THEN
PRINT "DSR"
END IF
IF OutRegs.AX AND 2 ^ 6 THEN
PRINT "RI"
END IF
IF OutRegs.AX AND 2 ^ 7 THEN
PRINT "RD"
END IF
PRINT
END SUB
SUB Init
COLOR 7, 1
DisplayHeader
Line$ = "Initializing..."
DisplayLine 12, 0, "C", Line$
DestAddr = 8 ' Destination address (R7000)
SourceAddr = &HF1 ' Source address (IBM PC)
CMDSetFreqTX = 0
CMDSetModeTX = 1
CMDReadRange = 2
CMDReadFreq = 3
CMDReadMode = 4
CMDSetFreq = 5
CMDSetMode = 6
CMDSetVFO = 7
CMDSetMem = 8
CMDVFOtoMem = 9
CMDMemToVFO = &HA
CMDClearMem = &HB
CMDReadOffset = &HC
CMDSetOffset = &HD
CMDScan = &HE
Baud% = 9600
Editor$ = "vi"
LastFile$ = ""
ReadConfig
CMD1$ = CHR$(&HFE) + CHR$(&HFE) + CHR$(DestAddr) + CHR$(SourceAddr)
OpenCom
FOR i% = 0 TO 9
FOR j% = 0 TO 9
ch$(10 * i% + j%) = CHR$(16 * i% + j%)
NEXT j%
NEXT i%
InitBuf 1, 99
END SUB
SUB InitBuf (MemStart%, MemEnd%)
FOR i% = MemStart% TO MemEnd%
Freqs(i%) = 0
Modes%(i%) = 0
Notes(i%) = ""
NEXT i%
END SUB
SUB Main
DisplayMenu
Incr = .005
GetMenuItem:
Item$ = UCASE$(INKEY$)
IF Item$ = "" GOTO GetMenuItem
IF LEN(Item$) = 2 AND ASC(LEFT$(Item$, 1)) = 0 THEN
code% = ASC(RIGHT$(Item$, 1))
SELECT CASE code%
CASE 72
GetFreqAndMode Freq, Mode%
Freq = Freq + Incr
SendFreqAndMode Freq, 0
CASE 80
GetFreqAndMode Freq, Mode%
Freq = Freq - Incr
SendFreqAndMode Freq, 0
CASE 75
Incr = Incr - .0005
IF Incr < .0005 THEN Incr = .0005
CASE 77
Incr = Incr + .0005
END SELECT
ELSE
Item% = VAL(Item$)
SELECT CASE Item%
CASE 1
LastFile$ = ""
InitBuf 1, 99
RadioMemToBuf 1, 99
CASE 2
BufToRadioMem 1, 99
CASE 3
InitBuf 80, 99
RadioMemToBuf 80, 99
CASE 4
FileToBuf ("")
CASE 5
BufToFile ("")
CASE 6
DisplayBuf
CASE 7
EditBuffer
CASE 8
SetBaud
CASE 9
SetEditor
CASE ELSE
SELECT CASE Item$
CASE "X"
Experiment
CASE "S"
SortBuf
CASE "U"
UniqBuf
CASE "Q"
EXIT SUB
END SELECT
END SELECT
END IF
DisplayMenu
GOTO GetMenuItem
END SUB
SUB OpenCom
Baud$ = RTRIM$(LTRIM$(STR$(Baud%)))
OPEN "COM1:" + Baud$ + ",N,8,1,CD0,CS0,DS0,OP0,RS,TB2048,RB2048" FOR RANDOM AS #1 LEN = 1
END SUB
SUB RadioMemToBuf (MemStart%, MemEnd%)
DisplayHeader
Line$ = "Transferring: Radio Memory --> Buffer"
DisplayLine 5, 0, "C", Line$
Line$ = "(Press <SPACE> to abort)"
DisplayLine 9, 0, "C", Line$
COMErr = FALSE
ON LOCAL ERROR GOTO COMError2
IF LOC(1) > 0 THEN x$ = INPUT$(LOC(1), #1)
FOR memory% = MemStart% TO MemEnd%
IF INKEY$ = " " THEN EXIT FOR
CMD% = CMDSetMem
Data$ = ch$(memory%)
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
CMD% = CMDReadFreq
Data$ = ""
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
ReceiveFreq Freq
CMD% = CMDReadMode
Data$ = ""
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
ReceiveMode Mode%
Freqs(memory%) = Freq
Modes%(memory%) = Mode%
LOCATE 7, 29: PRINT USING "Memory:## ###.####Mhz"; memory%; Freq
NEXT memory%
EXIT SUB
COMError2:
GetPortStatus
COMErr = TRUE
Line$ = "COM port error detected -- attempting to fix, please wait."
DisplayLine 12, 0, "C", Line$
CloseCom
OpenCom
Line$ = " "
DisplayLine 12, 0, "C", Line$
RESUME NEXT
END SUB
SUB ReadConfig
FileErr$ = ""
ON LOCAL ERROR GOTO RCErr
OPEN "7000mem.cfg" FOR INPUT AS #2
ON LOCAL ERROR GOTO 0
IF FileErr$ = "Y" THEN
WriteConfig
ELSE
INPUT #2, Baud%, Editor$
CLOSE #2
END IF
EXIT SUB
RCErr:
FileErr$ = "Y"
RESUME NEXT
END SUB
SUB ReceiveFreq (Freq)
Freq = 0
Count% = 0
RFLoop:
Count% = Count% + 1
a$ = INPUT$(1, #1) ' Get next character
v% = ASC(a$) ' Convert to number
IF v% = &HFD THEN EXIT SUB ' Look for end byte
h$ = HEX$(v%) ' Convert to hex string
IF Count% = 6 THEN Freq = Freq + VAL(h$) / 1000000
IF Count% = 7 THEN Freq = Freq + VAL(h$) / 10000
IF Count% = 8 THEN Freq = Freq + VAL(h$) / 100
IF Count% = 9 THEN Freq = Freq + VAL(h$)
IF Count% = 10 THEN Freq = Freq + VAL(h$) * 100
GOTO RFLoop ' Loop back for next char
END SUB
SUB ReceiveMode (Mode%)
Mode% = 0
Count% = 0
RMLoop:
Count% = Count% + 1
a$ = INPUT$(1, #1) ' Get next character
v% = ASC(a$) ' Convert to number
IF v% = &HFD THEN
EXIT SUB
ELSE
h$ = HEX$(v%) ' Convert to hex string
IF Count% = 6 THEN
IF VAL(h$) = 2 THEN Mode% = 1
IF VAL(h$) = 5 THEN Mode% = 2
END IF
IF Count% = 7 THEN
IF VAL(h$) = 2 THEN Mode% = 3
IF VAL(h$) = 0 THEN Mode% = 4
END IF
GOTO RMLoop ' Loop back for next char
END IF
END SUB
SUB SendCmd (CMD%, Data$)
Msg$ = CMD1$ + CHR$(CMD%) + Data$ + CHR$(&HFD)
MsgOut$ = ""
FOR i% = 1 TO LEN(Msg$)
MsgOut$ = MsgOut$ + " " + HEX$(ASC(MID$(Msg$, i%, 1)))
NEXT i%
PRINT #1, CMD1$; CHR$(CMD%); Data$; CHR$(&HFD);
END SUB
SUB SendFreqAndMode (Freq, Mode%)
IF Freq >= 25 AND Freq <= 1000 THEN
Freq$ = STR$(Freq)
Freq$ = MID$(Freq$, 2, LEN(Freq$) - 1)
IF Freq < 100 THEN Freq$ = "0" + Freq$
FOR i% = 1 TO 5
Freq$ = Freq$ + "0"
NEXT i%
Data$ = CHR$(0)
Data$ = Data$ + CHR$(16 * VAL(MID$(Freq$, 7, 1)) + VAL(MID$(Freq$, 8, 1)))
Data$ = Data$ + CHR$(16 * VAL(MID$(Freq$, 5, 1)) + VAL(MID$(Freq$, 6, 1)))
Data$ = Data$ + CHR$(16 * VAL(MID$(Freq$, 2, 1)) + VAL(MID$(Freq$, 3, 1)))
Data$ = Data$ + CHR$(VAL(MID$(Freq$, 1, 1)))
CMD% = CMDSetFreq
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
IF Mode% > 0 AND Mode% < 5 THEN
CMD% = CMDSetMode
IF Mode% = 1 THEN Data$ = CHR$(&H2)
IF Mode% = 2 THEN Data$ = CHR$(&H5)
IF Mode% = 3 THEN Data$ = CHR$(&H5) + CHR$(&H2)
IF Mode% = 4 THEN Data$ = CHR$(&H5) + CHR$(&H0)
COMErr = TRUE
WHILE COMErr
COMErr = FALSE
SendCmd CMD%, Data$
WEND
Data$ = ""
Flush
Flush
END IF
END IF
END SUB
SUB SetBaud
SetBaudTop:
DisplayHeader
Line$ = "Current baud rate: " + Baud$
DisplayLine 5, 1, "C", Line$
Line$ = "Valid baud rates: "
DisplayLine 7, 1, "C", Line$
Line$ = "1. 300 "
DisplayLine 9, 1, "C", Line$
Line$ = "2. 1200"
DisplayLine 10, 1, "C", Line$
Line$ = "3. 2400"
DisplayLine 11, 1, "C", Line$
Line$ = "4. 9600"
DisplayLine 12, 0, "C", Line$
Line$ = "Select a baud rate"
DisplayLine 14, 1, "C", Line$
INPUT Item$
Item% = VAL(Item$)
IF Item$ = "" THEN EXIT SUB
SELECT CASE Item%
CASE 1
newBaud% = 300
CASE 2
newBaud% = 1200
CASE 3
newBaud% = 2400
CASE 4
newBaud% = 9600
CASE ELSE
newBaud% = 0
END SELECT
IF newBaud% = 0 THEN
GOTO SetBaudTop
ELSE
CloseCom
Baud% = newBaud%
OpenCom
WriteConfig
Line$ = "Baud rate has been reset to " + Baud$
DisplayLine 17, 1, "C", Line$
Line$ = "Press any key to continue..."
DisplayLine 20, 0, "C", Line$
x$ = INPUT$(1)
END IF
END SUB
SUB SetEditor
DisplayHeader
Line$ = "Your current editor: " + Editor$
DisplayLine 5, 1, "C", Line$
Line$ = "Change to"
DisplayLine 7, 1, "C", Line$
INPUT NewEditor$
IF NewEditor$ = "" THEN
EXIT SUB
ELSE
Editor$ = NewEditor$
WriteConfig
Line$ = "Your editor has been changed to " + Editor$
DisplayLine 9, 1, "C", Line$
Line$ = "Press any key to continue..."
DisplayLine 12, 0, "C", Line$
x$ = INPUT$(1)
END IF
END SUB
SUB SortBuf
FOR j% = 1 TO 99
FOR i% = 1 TO 98
IF Freqs(i%) > Freqs(i% + 1) THEN
Freq = Freqs(i%)
Freqs(i%) = Freqs(i% + 1)
Freqs(i% + 1) = Freq
Mode = Modes%(i%)
Modes%(i%) = Modes%(i% + 1)
Modes%(i% + 1) = Mode
Note$ = Notes(i%)
Notes(i%) = Notes(i% + 1)
Notes(i% + 1) = Note$
END IF
NEXT i%
NEXT j%
END SUB
SUB UniqBuf
Freq = Freqs(1)
FOR i% = 2 TO 99
IF Freqs(i%) = Freq THEN
Freqs(i%) = 0
Modes%(i%) = 0
Notes(i%) = ""
ELSE
Freq = Freqs(i%)
END IF
NEXT i%
END SUB
SUB WriteConfig
OPEN "7000mem.cfg" FOR OUTPUT AS #2
PRINT #2, Baud%, Editor$
CLOSE #2
END SUB